/*
 * @Description: 
 * @Author: rendc
 * @Date: 2025-10-27 15:32:08
 * @LastEditors: rendc
 * @LastEditTime: 2025-10-29 09:02:48
 */

// 不能以0开头 纯数字 最后一位可能是X 18位
// 不能以0开头
var reg = /^[^0]/g;
// 纯数字
var reg = /^\d{*}$/g;
var reg = /^[0-9]{*}$/g;
// 最后一位可能是X可能是数字
var reg = /[xX\d]$/g;
// 18位
var reg = /^\d{16}$/g;

// 合并 
var reg = /^[1-9]\d{16}[xX\d]$/;


var reg = /\d{3,6}/g;
// console.log(`🤡 CC - reg.exec("12"):`, reg.exec("12")); // null
// console.log(`🤡 CC - reg.exec("123"):`, reg.exec("123")); // [123]
// console.log(`🤡 CC - reg.exec("1234"):`, reg.exec("1234")); // [123]
// 贪婪模式
// var reg = /\d{3,6}/g;
// var string = "123456789";
// console.log(reg.exec(string)); // [123456]
// console.log(reg.exec(string)); // [789]
// console.log(reg.exec(string)); // null
// console.log(reg.exec(string)); // [123456]

// console.log('🤡 CC - string.match(reg):', string.match(reg));

// 非贪婪模式
// var reg = /\d{3,6}?/g;
var reg = /\d{3}/g;
var string = "123456789";
// console.log(reg.exec(string)); // [123] lastIndex 3
// console.log(reg.exec(string)); // [456] lastIndex 6
// console.log(reg.exec(string)); // [789]
// console.log(reg.exec(string)); // null
// console.log(reg.exec(string)); // [123]

console.log('🤡 CC - string.match(reg):', string.match(reg));

// 选择
var reg = /html|css|js/g;
var str = "abcdehtmlcssjs";
console.log(reg.exec(str)); // [html] lastIndex 9\0
console.log(reg.exec(str)); // [css] lastIndex 
console.log(reg.exec(str)); // [js] lastIndex 
console.log(reg.exec(str)); // null lastIndex 
// 分组
var reg = /(html){1,3}?/g;
var str = "abcdehtmlhtmlhtmljs";
console.log(reg.exec(str)); // [htmlhtmlhtml] lastIndex 
// 候选
var reg = /I like (html|js|cs)/g;
// console.log(`🤡 CC - reg.test("I like html"):`, reg.test("I like html")); // true
// console.log(`🤡 CC - reg.test("I like js"):`, reg.test("I like js")); // true
// console.log(`🤡 CC - reg.test("I like cs"):`, reg.test("I like cs")); // true

var str = "I like js,I like cs,I like html";
// str.match(reg)
console.log('🤡 CC - str.match(reg):', str.match(reg));
// 捕获与引用
var date = '2025-10-28';
var reg = /(\d{4})-(\d{2})-(\d{2})/
// 2025年10月28日
// 想要访问必须调用方法
// 捕获
reg.test(date);
// reg.exec(date);
console.log('🤡 CC - RegExp.$1:', RegExp.$1);
console.log('🤡 CC - RegExp.$2:', RegExp.$2);
console.log('🤡 CC - RegExp.$3:', RegExp.$3);
console.log(RegExp.$1 + "年" + RegExp.$2 + "月" + RegExp.$3 + "日");



// 表单验证中手机号 
//   1. 纯数字
//   2. 11位 
//   3. 
//     3.1 开头 13|15|16|17|18|19
//     3.2 开头是1 第二位是 3,5-9
//   4. 
//     4.1 \d{9}$
//     4.2 \d{9}$

// var reg = /^(13|15|16|17|18|19)\d{9}$/;
// var reg = /^1[356789]\d{9}$/;
// var reg = /^1[^0124]\d{9}$/;
// var reg = /^1[^0-4]\d{9}$/;
// var reg = /^1(3|[56789])\d{9}$/;
// var reg = /^1(3|[5-9])\d{9}$/;
// var str1 = "14912341234";
// console.log('🤡 CC - reg.test(str1):', reg.test(str1));



var str = 'hello world hello';
var reg = /hello/g;
console.log('🤡 CC - reg.lastIndex:', reg.lastIndex);
console.log(str.search(reg)); // 0
console.log('🤡 CC - reg.lastIndex:', reg.lastIndex);
console.log(str.search(reg)); // 0


// 不加全局匹配符号g 匹配字符串中符合正则表达式的字符串，并返回该字符串的⼀个数组，其中包括字符串内容、位置
var str = 'hello world hello';
var reg = /hello1/;
console.log(str.match(reg));

// 加g 设置全局匹配，则⼀次性返回所有符合正则表达式的字符串数组
var str = 'hello world hello';
var reg = /hello1/g;
console.log(str.match(reg));

// 3. 如果其中添加了分组，返回符合要求的字符串以及分组的⼀个数组
var str = 'hello world hello';
var reg = /(hello)/;
console.log(str.match(reg));

// split()
var str = 'hello3world12hello4566';
var reg = /\d+/;
console.log(str.split(reg));

// split()
var str = '2025-10-28';
console.log('🤡 CC - str1:', str);
console.log(str.split("-"));
console.log('🤡 CC - str2:', str);


// replace()
var str = 'hello3world12hello4566';
console.log('🤡 CC - str_old:', str);
var reg = /hello/g;
var result = str.replace(reg, 'world');
console.log('🤡 CC - str_new:', str);
console.log('🤡 CC - result:', result);


// 正向前瞻 
var str = 'Hello, Hi, I am Hilary.';
// 后⾯⼀定要匹配什么
var reg = /H(?=i)/g;
var newStr = str.replace(reg, "T");
console.log('🤡 CC - newStr:', newStr);
// 'Hello, Ti, I am Tilary.'

// 负向前瞻 
var str = 'Hello, Hi, I am Hilary.';
// 后⾯不能匹配什么
var reg = /H(?!i)/g;
var newStr = str.replace(reg, "T");
console.log('🤡 CC - newStr:', newStr);
// 'Tello, Hi, I am Hilary.'

// 张三
// 一堆文件 
var files = ['test01.js', '头像.png', '作业01.doc', '作业02.doc']
// 筛选.doc后缀的文件
// var reg = /\.doc$/; // 直接匹配.doc结尾的文件
// var reg = /\.(?=doc)/; // 直接匹配.后面是doc的文件
var reg = /\.(?!doc)/; // 匹配.后面不是doc的文件
var fileArr = files.filter(
  function (item) {
    return reg.test(item);
  }
);
console.log('🤡 CC - fileArr:', fileArr);
